home *** CD-ROM | disk | FTP | other *** search
- Subject: v24i100: psroff, Troff to PostScript filter, Part05/19
- Newsgroups: comp.sources.unix
- Approved: rsalz@uunet.UU.NET
-
- Submitted-by: Chris Lewis <clewis@ferret.ocunix.on.ca>
- Posting-number: Volume 24, Issue 100
- Archive-name: psroff3.o/part05
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # The tool that generated this appeared in the comp.sources.unix newsgroup;
- # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
- # Contents: fonts.lj/S.28.pk.UU man/troff2ps.1.S troff2.c
- # widths/genext.S
- # Wrapped by clewis@ecicrl on Fri Apr 5 20:55:58 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 5 (of 19)."'
- if test -f 'fonts.lj/S.28.pk.UU' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'fonts.lj/S.28.pk.UU'\"
- else
- echo shar: Extracting \"'fonts.lj/S.28.pk.UU'\" \(17561 characters\)
- sed "s/^X//" >'fonts.lj/S.28.pk.UU' <<'END_OF_FILE'
- Xtable
- X !"#$%&'()*+,-./0123456789:;<=>?
- X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
- Xbegin 644 fonts.lj/S.28.pk
- XM]UD``<``````````!":N``0FKH#Q(0```%I3=/=6URU_3575357535753575
- XM]-5=5-5=5-5=5-5=7TU5U4U5U4U5U4U5U4U5U?3575357535753575]-5=5-
- XM5=5-5=5-5=7TU5U4U5U4U5U4U5U4JBL4J3L%IVKTIWKEIHKDIB)JQ:0S:L2D
- XM-6JEHS9JI*UJI*YJA:YJA+!J9;!J9+%J5;)J1+-J-;3VHDM6H5MFH$MVGUN&
- XMGDN6G5NFG$NVFUNVFTO6F5O6F4OVF$OVEUOVETP6E5P6E4PVDUPVDTQ&DEQ?
- XM:13':%QVA,AG7)9DRF5<MD3,8US?8DSF%<_Y'1^-)]1M1=9-8[JA"R0```"-
- XM>#3V,KJQW+'*N=2XQ;[.O<'"RL&]Q\7%NLG"M8L+C,O[*UBVLGNKRQNGM*M+
- XMBYL+YK*;BWMZP6L(O+:UG$:7O[:SG&:&PK6QC)5VQ+6HRU9<>TB,U%7)M&C.
- XM5%RK1(T$-<RT*-%27-O--"3/NM1"30N-5!71M]6=.UUXT[38C4M->-6TUHUK
- XM35C7M-2-BTTXU[73G5M]%135N-!"34NL]"33O,U271@K3,4TT(2TRE1<Z&M,
- XME53-B+3'5ERXJUQ&=<F+&UPFAL:;.VOWEL2;6VO(L&P:M[>XFR:^L+FXM*M'
- XMNK&\NGLK:+6RO\RXL(M<+)NL7%Q[W!RL+!O<Z^Q;C4N<JQW+&Z"`0B4```!L
- XM6DSV0K,MR->3U/E=+BE]#YG0XI?2^5U)/7C<(`7>WQ`!'QWP!=XMR->3U/E=
- XM+BE]#YG0XI?2^5U)/7C<*S"PW"8```!O6C3V,L>P%JQ,;>PL'+V<7`SM7'K2
- XMT<F=7.P,:WQ<N\B<'$R*R8Q</&G*?)PL2,QLS!PHS&SL'`C,;1P*?.73P(?.
- XM75MWSUUK5]!-BT?/78P"?03:Q]%-O%T5W,317=PM)-[!TTW\#30!"]/T`1O2
- XM0!*]%`$L#00!+!ST`1PL]=_$STW\7.3>Q\U=QRP,U-MTO-3;=;S%V7>\Q==X
- XMP,M=9ZP,M=.,#!RET8PL');/C$PLALR<;#QVR:R,3&?%O+Q<2;P,[+K2T<G`
- XMSM7'P<O9Q</&WL/'H!:PH+$J````;T!"Z3TCW#%MFRU[35MM.1G1DYSY6<V7
- XMG+F9R9L)QYLIQ9M)PYMIP9N)OYNIO9O(O8OHNXP(N8PHMXPYM9Q)LYQIL9R)
- XMJ<J8G,EISI2="2G2M]2UUK/8L=KZVK'8L]:UU+?2DIT)2<Z6G,F)RIJ<B;&<
- XM:;.<2;6<.+>,*+F,"+N+Z+V+R;V;J;^;B<&;:<.;2<6;*<>;"<F9G+EYS96<
- XM^3G1D9T[;5M->RV6(]PQ@`XM````;U(&\A\=<0_QUQ"@7SP```!0/3KW.=\M
- XMY=M]F=>=>=>=:M:M:M:M:=>=>=:M:M:M:M:=>=:M:M:M:M:=>=>=>=CXVYVY
- XMVYVYVZVJVJVJVYVYVZVJVJVJVYVYVYVZVJVJVJVYVYVYVYVWW5WR$*!?/0``
- XM`%`].O<Y$M]=U]N=N=N=N=NMJMJMJMN=N=N=NMJMJMJMN=N=NMJMJMJMN=N=
- XMN=N=OXV)UYUYUYUJUJUJUJUIUYUJUJUJUJUIUYUYUJUJUJUJUIUYUYUYV7VU
- XMWBWPN$5#````5T=/^$[B`G3P*,'"S\7"P-3!P[UZP[V)P[VGP_O;?"O<;"XK
- XMW5PKWDPOO>7!Y+WTP>*P$$X!#`L!_!`=Q`$>3:U0<-!$````=&)1]U"F;3^`
- XMT8+/^$S?ALOXC)BL?V&%Q6.%Q%6$PV6%P?9X6_:!A;Y8.$O6@X6[]H6%N6AX
- XM6X:(A+=HF%MEBX2U:+A;/VC86Q:/A;!9&$KVD86M]I.%JVE86J67A*EI>%J%
- XMF82G:9A:7VFX6C:=A:)9^$H6GX6?]J&%G6HX6<6EA)MJ6%F?:GA9=JF%EFJH
- XM25:KA91:V$DVK861]J^%CVL86.6SA(UK.%B_:UA8EK>%B%N82':YA89;N$A6
- XMNX6#]KV%@?TGU%_6/]@0SK#>2````&Q:4?=/VL("O,`BU`'-@!?#P,,!+!R,
- XM'?O.O<O2O9K6K6O8O3K<K1K>K/H!"LV@$JRZ`4K)H!:L>@&*Q;`8O#L!J\*@
- XM'*P;`<N_L!ZY^P(+?``@P&L"*U_``BP$L"2SP`),`N+`=-Y'P"N$WDBQZ<"`
- XM%HS/A-Y(P!N$WDBRP'3>1\`OP`),`_L"2TP`(L!?L"*W^P(+G[`>N_L!R\&P
- XM&KPZ`:K%H!BL:P%KQ[`4O)L!*\NP$+S;WKT*W*T[V+U;UKV+TKV\#.P-[!R,
- XM$!+#P,,!?8`<U`(LP"O"VI#G2P```&!24?E0O4`38!'BC?^@W>*BV^*DV?IM
- XM>HUE&BUE*AU6*BU%.BTV2BTE6BTE:AT6:BT%>BT%BASVBBSEFBS6H*+,6AHL
- XMQ:*ARVHJ+*6CHLI:2AR?6EHL=J:BQEIZ+&6HH<5JBBQ%J:+#:JHL):NBPEK*
- XM'!:LHL!:VBP%KJ&_:NHKY:^BO6L**\6QHKQ;*ANVLJ*Z6SHKEK2BN%M:*X6V
- XMH;=K:BMEMZ*V6XH;5KBBM%N:*S:ZHK);NBLEO*&Q:\HK!;VBL%OJ&O];^BK6
- XMP**K?`HJN,"AJIOZ.GH[VDHZBYJ'Y+"NMI`N3@```%U-3OA-'H`1)==1XEV9
- XMY=M``COE3!2PZ,FPY4P4`"U>5-N>/946U6+H`1&X)%````!H6$_X3@`9RL'>
- XMP<G`WL#+X"2]Z\O!W,')P]K#KDU\;7"`T5(```!E4T_W3AU4_63]=):PGEEK
- XM:7:6N)1Y6ZDGEKN0B6NY"):[B0EKJ)&5NWDI6[:2EKII.6NEE):Y:4EKE965
- XMN5E9:Y26EKA)>6MTF):V29E;=)F5MDF9:U2:ELR6S);,E<R6S);,ELR6S)7-
- XME<R6S);,E<V4SI+/D=&-&-&-&-&-&-&-&-&+9)Z+=)V+A)R+A)R+E)N+I)J+
- XMM)F+M9B+Q9>+QI:+U9:+UI6+YI2+YY.+]Y*+^)&+^0D(OY"0B^DHB]E'B[EV
- XMBUGEU4UCXM9=5+!N4P```#@R/_DRT,/2S,O1Q]3#PJO"O%?!K+/`G<C=C=?>
- XM?>?>?>]][WWN)][DC>^=VMR]R]O!V</8Q-?%UL;5Q]3(T\K1R]'+T<O1RM+)
- XMT\C5QM;$V,/9P=N]WYWHWO??;???;457U<36P]C!W(QPL()4````;%I0]T_"
- XMD!"<W$V</(R-3(Q,S1R\'.SLZ]#,T)TLK2?4R-1=;&UDU\37.L'"P\+`HHQ<
- XM'!P,6";)O`O)86R[NLN\VJK-K.J9SJSZ><^M"7C043TH:=$]CX6`*O@X`L<W
- XM`M<H`M@7`O]Q<"_"`QX\$#'``S[:L#+!`OQ0(>3=S,"Q50```&533_=.V.0!
- XML"K3`XP#OIH#C6`M`2`C`:`<`@`7TSI-,!+1BIT=W0NLT-J]&M*]?-*M/-2]
- XM2M6]'-6M;+S6K7R<UZV,?\V*V<7-FMK#_0V:VM`LVJV\'FT-JMO0'-JMO"_0
- XMV:VM`\V:VL7\V*V<?->MC)S6K7R\U:ULT;U*U;U,TJT\U[T:TKVM"ZS0W=&*
- XMG1`2TSI-,!<"`!P!H",!("W6`WZ:`[P#C3`JY`&]D+"K5P```&Q:3_=.S>3<
- XM`BQ`,,`#/HK=K1K1H<'/K/T,VLW#'#S*S,-<'+K+P:P,JLK`P;RJRKP_O)K)
- XMO%K)K)K&^\BLB\?HK(K(K(O'K'O)XZQZQZRKQJQKRZQJQJS+Q:Q;S?K%K%K/
- XMK$K$K0O#K#O1K#K#K3K"K"K5K!K!K7K`K`K9JZNMNYJ;W<!Z?``0P%I<`!/#
- XM&APP%MH!O4`AS@*<0#'IH#/``PQ`(N3<S:#J6````&554/A/Q[8!/"VLC4SL
- XMZWL+?)M+JTQK+`LL.RQ+*_LLBRO++*LKJQSK&WLM"RM++2LK+[+4LK"RUK*;
- XM+8LGL]BS:RVK);/:LT^RW+(_L]RS+GLMZR*SW+,^*RW+)+/:LU^RVK)_LMBR
- XMFQV+&K+6LK"QUK&R^QU+&TL=*QMOL-*PN+#0L+JM"KRLZKZ<Z;^LRL"<R<*<
- XMJ<2,J,;XR(R(QHMTM'QGM(M7Q'M4%+1\1[1"2U;$:U0O2V;":V0DMUPEMT-+
- XM9L!K9$2W7`6W1%MEP%ME1K5<!;5DP;[!7DP+[`?[^^OXOL"^0'C260```'=D
- XM4?=.!P':/]A?UGU(']*#^%O6A86[:'A+M8B%N6B82Y6*A;=HOX6U:-A;-H^$
- XMLUD(6Q:1^%KVDX6M:5A*U9:%JVEX2J:8A:EIGX6G:;A:5IV$I5GH6C:?^%H6
- XMH86?:CA)]:2%G6I?A9MJ>%F6J8296JA9=JN$EUK(65:M^%DVKX61:QA)%;*%
- XMCVL_A8UK6%BVMX2+6XA8EKF$B&NH6':[^%A6O86#:_A(-<"%@6P?A7;#A5;%
- XMA%7&A3;'^%%LF*R_B,WX;/^$T8+3^`U6I[#=6@```$Q#4O=0T\$!;)`0S=S1
- XMV+K`U8Q:TWR:T&S9SFSYS%TIRTU)R5U8R)TIQ_K2G%^].<3[U)PZU:PXUJPW
- XMUZ`=YKURQ[SL7!O+RKO)SIO'T8O%P,%VP,2\5EP,*\E4P,&LQ3P+O.0L&JT4
- XM'`JM)!P)O3Q(O4Q'O6PG^]?":]C"7\#8P5P-G!7`V<!<'9P%P-JV_`V<!<'9
- XMML#9P&_`V;?`V+B]FXO8N;V*J]>ZO7J_O6K!K5K"K4K#O2K%K1K'K/K)G.K*
- XMK+O,K)O.O$P-'!K"U-77TMO.W\D!;!V`@*Q<````;U)J\E#433?0D,Z2S)3*
- XME<F4RI3*E,J4RI3*E,F5R97)E<F5R97)E<F4RI3*E,J4RI3*E,F5R97)E<F5
- XMR97)E<F4RI3*E,J4RI3*E,J4RI3+D\V1SY/-E<V5SI3.E,Z4SI3.E,Z4SI7-
- XME<V5S97-E<V5SI3.E,Z4SI3.E,Z4SI7-E<V5S97-E<V5SI3.E,Z4SI3.E,Z4
- XMSI3.E,Z2T)#2?40`9TU2#_'7$("K7@```&]2:O)0%-1]*0T)+.E,V5SI3.E,
- XMZ4SI3.E,Z4SI7-E<V5S97-E<V5SI3.E,Z4SI3.E,Z4SI7-E<V5S97-E<V5SI
- XM3.E,Z4SI3.E,Z4SI3.E<V3SY'-D\N5R97)E,J4RI3*E,J4RI3)E<F5R97)E<
- XMF5R97)E,J4RI3*E,J4RI3)E<F5R97)E<F5R97)E,J4RI3*E,J4RI3*E,J4S)
- XM+.D-!]-`!L#5(/\=<:@*7P```#HZ!0#E#W"PN&$```!=2C3W,M"P'\<!C,`4
- XMT`$,%[WKP9RCPKQ*QTP:QZQDP)RIQ5JLR<1*K.G#2:SYPECZT9P4BM*K5ZU)
- XMM'O4FE>M6I1[U:A7K7F$>]>75[UY='O8EE>]B56+V)5(P-BC6+V:)9O9HDJ]
- XMFA6KV<.ZVL+`K;P,&MN\+ZVZP^*MN<6=JL6=F\6M;"Q9U</&G2<9QIT(*;1)
- XMS86959R::91ZQ+F(6+K!P(1[TL/%P<['P\7(R\')P--XL1AB````44EG^E`!
- XM3``>Q@&,L!3.`1N+W9PYVXQXV(R8UWS(U6SXTVT(TETHT5TYSUU)SEU9S5UI
- XMS%UYS$V)RUUZREV)RTV9REV9RDV:R5V9RDV:R5V9RDV9REV9RDV9RTV)RUUY
- XMS%Q,))S4P]#.3"S\]<'/T$PL_03#S\],3/S5Q<))S$V9R_3:G)7;G(3<G(]-
- XMRL9=RL9-VL;TW;Q%W;Q.)-Z\-=W`P^)-Z\-=W`PUW;Q$WKQ$W<##7=O$;<O$
- XM;;O%;;K%?:O%C9K&C8K'C7K'K6G(0EU*R$)M*LE#;0G*5&S:RT9\JLQ'C&O-
- XM2*P,#.6=/03`S]),++U$Q<767-'>XD`H4"CB0"A0*.)`*%`HXD`H4"CB0"DP
- XM*I"78P```$M%2OHRJJ#.I;@Z2JM4HZRS6AL+%*&RKUFUKDFVK5BXJUBF6EJD
- XMFAI**H6)JIJ$B*Z*97>Q>F2&LWI%=K5J1(6W:B5UN5HDA;I*%82[6@24O$E9
- XM.]6$RE=<M'3,1ES%5,Y$7.]$3/0USU)-%!7104TITN*-/B?4]M7B76]-;B75
- XM;5]=7C;4XVU.-M3C;575]M9-<[&PQ60```!!-5/X4-6MS$U\C4RM&GC/C!;-
- XM?%7+?'7)?(7(?*3(?++(<!&`$7`1Y(`1D!"M^][`W<+;P]O$VL3:Q=G%V<7:
- XMQ-K$ULC3R]#.SK/"RZ?"R:K`R)P<#%K#O$K%K#K'K"G)G!K*C`K,>ZS7J\YJ
- XMK/:;SVFM!H^]%7O25_O19L#15_O25[T6>]%7O25[T6>]%8O0:?K06JSUNLYK
- XMK.7!G-;!G-7#G+7$G*;%G(;'C';(G%;*K!?,N8S\W1RM7&VL$!,=(+!-90``
- XM`#PK,_<QS\/,R,C+QLW$SL/"S\'1P-*].M2M2M2M2]/[T_O3^]/CV5V'YKU>
- XM.M;YUJUIU_G7G.&)RTBL=IK#F[F\'0Q<S)Q]#`P`H*!F````0CAH^%#'';/:
- XM3878Y$V5V4*RRKO'O,6]P[_!P,&"ML"&L<*-1]5]5]1]5]5]5]5]9M9M9M9]
- XM5]5]9M9]7WU7U??5]]7WU8U??5C5XGU8U>-]7EC5XIU?G4K3L-.M.QTK'1L]
- XM"TSK?,N<J\Q[[%P</"P</!PL+!Q+_'O,FYS;;/L]*PU)U>*-9]9M;WQ$LVQ6
- XML&QJ9LBYR[;.L]*;@,#!9P```$H_2ODRJ-N];-74TM'2U]#3S;I4F:>H5X>,
- XMEEB5?2ADF4;4E%J2;6A$N178@UO1V9),T-J22]#;D5O0VY%,S<D4R]V13+W-
- XM'+W9(\K>G4K>G4G>K3K>K3^=^=2=ZM.MZM/YWYU)WJTZWJT_G?G4G>K3K>K3
- XM^=^=2=ZM.MZM/YWYU)WJTZWJT_G?G4G>K3K>K3^=^=2=ZM2-^M1P$)UT`1D"
- XMCZ`H^0*/H"CY`H^@*/D"CZ`H^0*/H"CY`J<"Q-2PO6@```!$-5+W4-2-["V<
- XM77Q]2DC2B7T(M\Z,",N<)\J<.,F,5\B,:,:,>,6<><.<B<+YRHP9RXP*RYN<
- XMR:K,FIS9FLV?BLVGO-IZSJ]KSJ:L^O6\Z_2\^TO.M,#.M/O/M`%3XP%3`53[
- XMS[2\[`2\ZT^\^T^\ZUK/IOK.MJSJ>LVW^LVHG-J9S9J<RJG,FYRZP(RYP?C*
- XMG"G(G#G'G%C'C&C&C(?%C)C#G*?"G+C`C.>XT'F-*$K4Q]?%V<+>C4"P5VD`
- XM```V(S3U,L)-%\_YS?K-^<VLWBG-K-XIS:S>*<VLWYS:S?G-K-^<VLWYS:S?
- XMG(0:R$&<C#R$&<A1G(0IQU*,=3C&5(Q&6,-FC!>(J)E;O*PL?&P\J<>PKVH`
- XM``!4033U,L)`'WTWQYS[QIS,/$K*Q<2LC'Q)R(&\2<:#O#K%=:Q*PW>L2<-Y
- XMC%G!?`7&K`?8JVVII]N9;<IWW:5]^4@!"2@!''`2R0$-'8U-38T:C'T)P\+/
- XMG'O-K)K,K*K+G,G+G,K)K-G)K-G"3SG.G"0JS:P5*LVL%#G.G"0YSIP5*LZ<
- XM%#K.G`4YSYP$2<^;4ZT(M$K0F52=*'99TX5FG4Q7C6PX?8P;3<BPL+EK````
- XM54)1]D_"D!S"`8Q`%\0!G"`;P`&[`<^P'/L!S[`<^P'/L!R@'+`<H!S[`<^P
- XM'/L!R@'+`<H!S[`<^P'/L!R@'+`<H!S[`<^P'+`:P`&<$!C#`5Q0%'&P$G*P
- XM$72]]UO>=[VXB]J*K9B[UXP:UHPKU(Q*TXQ;T)QKSYR+S9R;S)RZRYS+R9SJ
- XMR)S[Q:T:Q*TKPKTKP;U+N]6ZO7M\#8ML#:I<#;M+W:.]ZRH!"QD!'`%P$[)0
- XM%I#`L6P```!71TKX,M=`-'`27>D!!]V=^-RM^-RMZ=SYWYV_K>K;^=^=OZWJ
- XMV_G?G;^MZMOYWYV_K>K;^=^=OZWJV_G?G;^MZMOYWYVZWJVZWJM/F=^<2*WJ
- XMM8K>JTFMVL2:W+Q(O<NTG-K+2<V="EG-C1I)T=5AF5G2TV.)2M/0=)=:UGEI
- XM1J`5G4NAV;TLE-72S0F+UXT?H##Y`P^@,/D##Z`P^0,/H##Y`P^@,/D#)P-$
- XM`T"PEFT```!(/3/V,KK61,?4<_Q].1R-*BQ]*:O3G`G3FZTJNM*<"=.<"=*<
- XM"M*<"M&L"=*<&=&L"M&<&M"<*=&<*="<*L^L*L^<.<^<2<Z<2LVL2LV<6<V<
- XM:<R<:LN<>LJ<B<J<F<F<FLB<JL><N<><R<6LRL2<ZL.<^<*M"<"M&KK2J:U)
- XMBM:5O7H[V<K;R-W%W\,!+``6<!F@MVX```!"-VC[4,8=H]E-==?D3878N,>]
- XMP<&^P[S%NL:YLDMKFQBQN['/L<^PT+#0L<^QT+#0L="PT+'0XK#0L=#BL-+B
- XML-&QT;#2L-*P6TOL6]Q;W$OL.]P[S$O(6VO(TXTXTWU'U/?4?4]]3WU/?4C4
- XMXGU(U/G3K3K2L-&RT+/.MLRXRKK(O,:^Q,##P<'#P</!PL+`Q+[&O,BYR[;.
- XMM-"QTYU(U.)\%;-\)[%L.P:,2\Q[G+M-&;2P@6\```!'.#3W,M"]W'ULS2T,
- XM[!>\R\&<F\2<>LB,6<J<*LR<"LVJK/F?K0IZTI:M.5O3I*U*.]2CK4ORO4OQ
- XMO5L;U,S4L?O5L;U,`;U+*M6R^M2SK4I*T[2M.E^M*GG1J)T*FLZKG-K!G+K"
- XMG*K$G(K&G%K)K!O+N,#/S]+,U\;=O1"@E7````!41S/Y,;7;L]^Q`0H!*0$X
- XM`4<!1P%'JQ6R6^BT2S2^>V2S2]:W6S2]6X6R6\6Y2S6[6Y6S6[2Z6S6[.[6R
- XM74XELUTVLUTUM%TULVTO:S;1XFM&T'M&T&M7SO>U?-][6,R+6<N+:,M[>,J+
- XM>,J+><B+B<B+BL:;BL:;BPQ)NJQ)NK#"JZL,+YO*PHOHPWOWQDP5N<"O<0``
- XM`$H\2O@R`7H"'4`<V`&-L!:FL!*KD!"=&=Z-2-V-6=N->=F-B=B-J=:-N=6=
- XMN=2=RM.-VM*=VOT9WJT)WZ_0G>O\G?O)WLNMZ\^=^[K>RZWKSYW[OZWKR=Z]
- XM"=ZM"MV]"MVM&=VM*MRM&]NM*]JM/-BM30UJU-'5K5T]*=>2;*V).&S8I-K:
- XMI=?<F-+?FJ`1^@)?D"7Z`E^0)?H"7Y`E^@)?D"7Z`E^0)W`I0"F@CW(```!3
- XM13/X,<#.OM*ZU;C7MMFUVK/;L]NSM)LL2QM;#"L+BPP*NZOZO9OJOYO*P)O)
- XMP9NYPXNJPYN9Q)N*Q)N)Q9MZQ9MYQIMYQ:MJQ9M_G&FWG%JVK%FW^<:;?YQ9
- XMN/G$FYG#F[C#B\C"F\C!F^B_F_B_C!>]G"B[G$BYG&BVG)FRK+J+'-P-&\U;
- XM?;L-`*!2<P```$-`,_DQM=2SV+'9K;G<C=?=?=>K1<:+=<5[E<1KM<1;M<1;
- XMQ<-;U<-+UL,[YM]M[B;>]][VWN)]WB?=^-U]WBC<^=SXW.*=OCG<C=??7,"P
- XMKW0```!00C3Y,L*-A<+!U(P,/2JL71J72,_`=8C.P&68SL!5J<W`1;G-P$3`
- XMG.LUP)SZ)<&="23!K1@DP9TW%<&=-Q3!K484P9U;P*U5(\&=9<:==,6M9<7Y
- XMUTQ:UTQ9UUQ*UTQ9V$Q9UUQ9UTQ:UEQ9UTQIUEQIUDQYU5QIUDQYU5QYU%R)
- XMU$RHTURIT5RYT%S)SUSIS5SYS%T9R6TYQVU:PWU\&)V<_=S`$,@!?`S@D0-U
- XM````5D5G]D_$/7]=;TUO76]-;UUO36]=;TUO76]-;UUO36]=;TSZG$L+ZVN+
- XMNTHU5J&QHH6:"NH*%**:N@HTHYJ9I%I8IYI5IHI)ITIXHYJ$J(H9J%J)F:E:
- XMF(FJ2JEIJTJX::I:N%FK6KDZ"K2LDYK$K)\IK%K)&@K$K9&:U*V1FL6LJJQ:
- XMR1^:U*V1FL6LH!FL6LDIK$K9**U*R3BL6LDYJUJY2:M*N@2:M*N5FJ6JEXJE
- XMJ9B:E*F:"*E*B:&:=:>:.*=:::6*9*::>*5*2@J8HUHJ"LFA6@H:Z@E)H;&B
- XM9%H[6ZN;:]L<2ISO76]-;UUO36]=;TUO76]-;UUN)-<\,+#L=@```%E)2O@R
- XMB@(<,!4FQ@$D3)WU-DP=U36,#;4UJ]I42\#854P,#65CPKU5S,#37.O270O0
- XM71O/73O-74O,76O*77O)79O'7;K&7<O$7>K#7?O!4!"\!0$KI0$[E0%:A0%K
- XM5@&*1@&;)@&Z%@',0!W#`?P0(,`"*@(_L".@(L`"#!`?PP'<0!QAH!MBL!ED
- XMH!AEL!98H!59L!-:L!)<"P$%P;WUPZWEQ+W%QJVUQ[V5R;UURKUES+U%S;TU
- XMS[T5T+T%TKSET\#,75O"-EUL#`15V,"T1=JZ4UV\"%-=W!1C7?R40!+&8@%<
- XM,"&HP3)W````7U%G^4\"PP0.)`/U`_XD`_4#_B0#]0/^)`/U`_XD`_4#_B0#
- XM]0/^)`/U`<C>3771T-Q-6,TMM-2JU-E=2I=(V$U,=8C734QEF-=-3%6IU5U,
- XM1;G535Q$R=5-:S7)U4UZ)="=1=B230K43:@DT)U4VW%="=5-MQ30K47<84T)
- XMU4W;RM5-U2/0G63=75G57>34K53>74^=9-Y-2M5=Y-2=9-Y=.M9-Y-2==-Y-
- XM2=9=U=2=9-Y-2M9-U=2==-Q=6=9=Q=6=9-Q=;YUDVUUYU5VEV)U4VEV9U4V5
- XMVIU4V%VYU%UUW9TTUFWITTU6`0G233<!*=!=)P$[M-%P%LE,@!G'2:`;TQ5<
- XM`?`6`C`2`HW`,=(#CB0#]0/^)`/U`_XD`_4#_B0#]0/^)`/U`_0$$P(0H,IX
- XM````6DTT^C(!I;0]F+-->K%=>K!=>QE=BQE-FQA=FQ==JQ=-RP9=VE7?E4`1
- XMA%`2=$`3<U`48T`58TQ#PU-<-<)33#?!4TPHP5)<*,%#3#C!0TPIP4-,*,%2
- XM7"C!0TPXP4-,*,%33"C!1$PHP%1,)\%43"?`55P6P&5<%K]F7`;`9FOGOV=K
- XMV;UH>[J[B'NK&YB8M[.WFPBUM;2PL*L+JPL;&S.T&Q2TL\,L.TPDP;;`7`M[
- XM][ZYO8O+RZL+J^N+*WPK.WL\:KN;\-`.>0```!T$=/16$A`!RA(0L$=Z````
- XM-"-T^%;1;-K+C.;/;0;0;0]M#VT.UVT/;0]M!M!M!M!L]LY\SXTWTVTVTFTF
- XMTFTO;2]M+M=M+VTO;2;2;2;3;2C1K1:X27L````T(W3X5GT*TGTGTGTFTFTO
- XM;2]M+M=M+VTETFTFTETUTVTUTWT_C,?/70;07171;0;171]M#M=M#VT/;0;0
- XM;/?.?.?+K-?0H(%\````;UH[]CFWH!`K6UW$LKK92POM=)P=9(Q-1'QM-&R=
- XM!5LXM<]5L+.SSE2KBRRU2;RQRE1[^QR&-\*PQF1L2QQ&1L:PPG-LBQOW1<JQ
- XMO)1<RQN*1<ZSL[!5S[6+-5T,EDT\9TU,2$UL&4U[ZP39NK)-RUM2`0H`A9`K
- XM(`$]$"T04!Q]````;UH\]CH;(0\BL`!N^R$/(;(`;OL"#R&R$+"+?@```#0G
- XM=/I6$MCTUUU_3777XDUUU_3777]-==?TUUU_3777XDUUU_3777]-==?TUUU_
- XM3777XDUUU_3777]-==?TUUU_3777XDUUU_3777]-==?TUUU_3777]-==?B37
- XM77]-==?TUUU_3777]-==?B3777]-==?TUUU_3777]-==?B3777]-=?UTV"&@
- XM\G\```!L6E/V4+:PQ[#$M[^WO[N[N[N_M[^WP[/#M,:L:RL9LXLYL;"K6P:P
- XMM:F;FDJYF(O)*;R'B^M[Z&?`M<!U?"L\)T?#L<-T;%K%8WQ:Q7+VQXQV)LAL
- XMAA?(;(LLELFQRSRK'F`CL@(7XA8"%B<!]S8!]D]P'75P&W:`&8=P&7B`%XF`
- XM%8L/@!.+*`$8M(WXMHW8MYVYN)V9NIUYO)U9OITYP)T9PISYQ*RZQJR:R*QZ
- XMRJQ:S9PYT*OZTJO:U*NZUJN:V:M:W*LZWJL:`0JJ`3F)`6EI`8E)`:A(`<@H
- XM`>M0(/LP(K$"3Z`F^`*/8"I-`+!&H0```$HP9O-/RR`1]-]MV-OZV<#7PM7$
- XMT\;1R,Z!88RW-C?(A&2,2599P*9FJ+=GM+EIL:MKQ\!L##PVPZQ6Q4X#');?
- XM3*!@2J(```"->"KV,<=-WUW&W%W&W%W&W&W&W/;<<-MPVW#;<=IQVG)PW$`0
- XM$`$`+<UG+7<=AQV'#9<-EPV?;:;:;:;;7;;;7;;;]=Q'\+!&HP```$HP9O-/
- XMRDW^`Q;)3%;%K#;#P\!L#'MKH;EIM+=GN*9FK`E66<2$9(R'-C?+@6&,[(T<
- XM;3Q-7"U\#9^MN-UM_T`1++!@2J0```"->"KV,7]-SUVVVUVVVUVVVFVFVO;9
- XM<-EPV7#8<=AQUW+6W"`!`!`03<<'+:<=IQVW#;<-MPW/;<;<;<;<7<;<7<;<
- XM]=U,<,#-I@```$H]1OH_(P*V`J@"B@)L`DT`(]("'4`?8;`>8L`<9,`:9L`8
- XM9\`7:<`5:\`3;0L!)M'`$&T\WFU<W&ULVVV,V6VLUVW+UFW<U&W\TF`1S08!
- XM+,8!3*8!;(8!BW8!G%8!O#8!W!8![5\"#3`>U0'<%@&\-@&<5@&+=@%LA@%,
- XMI@$LQ@$<T&W\TFW<U&W+UFVLUVV,V6ULVVU<W&T\WFT<`0;0L!)KP!-IP!5G
- XMP!=FP!ADP!IBP!QAL![4`?T@(=`"/`)*`F@"A@+#`K#`S:@```!*/4;Z/P+#
- XM`K8"B`)J`DP"/0`AT@']0!ZQ8!S"8!K$8!C&8!?'8!7)8!/+8!*]!@$,T6WL
- XMTVW,U6V\UFV<V&U\VFUKW&U,W6TLWVT,`1;,`2:L`4:,`69[`89<`98\`;8<
- XM`=U0'M/P(-4!YAP!UCP!MEP!EGL!AHP!9JP!1LP!)M#`$6TLWVU,W6UKW&U\
- XMVFV<V&V\UFW,U6WLTV`0S18!*]!@$\M@%<E@%\=@&,9@&L1@',)@'K%@']0"
- XM'2`CT`),`FH"B`*F`L,0J`JP````.CH%`%@/<)!$M0```&!+1?9#(]@Q[%;5
- XMH]-Q;38O?1<WSW2,V%C+AIR9>@Q:":##H*&AOZ&CH[FCIJ6QI:FJI:JLR;#%
- XMM,&YN\"SRJ>SD$2V````8$M%]D.SI\JSP+NYP;3%L,FLJJ6JJ:6QI::CN:.C
- XMH;^AH:##H)H,6@><F6C+A8S81\]S]]%R;387TZ/L758CV#&0?;<```!@0U#R
- XM1+BVM;NQOJ[!K,.JQ*JFQZ3*HLNAS:'-H,Z@SISYSYT(T(T(T7T8T(T??1?2
- XM;2]])M)]+B;2?2XFT]@0`10>)M-]/B;3?3;3]]-M-]/WTHTHTGTHTHTHT9T9
- XMT9T:#0H-"ASZ'0HLZDS:;*Q*W#KL&QOK2[N+88!ZN@```&]24/)$J;:FNZ*^
- XMG\&=PYO$FY?'E<J3RY+-DLV1SI'.D,^0SY#0C0C0C1?1C0C1]]%])M+WTFTG
- XMTN)M)]+I)M-]/B;3?3;3]]-M-]/WTHTHTGTHTHTHT9#1D-&0T9'0D="2SY+0
- XMD\Z5S9?*Q)[#G\&BOJ6[J;80@'J[````;U)0\D0K6INZ6^HL&?PY_#RI?-E<
- XMZ3T)+/DM"1T)'1D-&0T9#1C2C2C2?2C2C2]]-]-M/WTVTWT^)M-^DM-M)^+2
- XM;2?2;2]])M)]'WT8T(T7T8T(T(T)#/D,^0SI'.D<V2S9++D\J5QY><PYO#G<
- XM&?OJ*[I[6I"`@[X```!O4FKR4*FVIKNBOI_!G<.;Q)N7QY7*D\N2S9+-D<Z1
- XMSI#/D,^0T(T(T(T7T8T(T7T8T7TFTGTO;2?2XFTGTND6TWT^)M-]/VTWTVTW
- XMTHTGTHTHTGTHTHTHT9#1D-&0T9'0D="2SY+0D\Z5S9?*Q)[#G\&BOJ6[J;8`
- XM9VU$X]9-08"#OP```&]2:O)0*UJ;NEOJ+!G\.?P\J7S97.D]"2SY+0D="1T9
- XM#1D-&0T8THTHTGTHTHTGTHTGTVTWT_;3?3XFTWZ1TVTGXM)M)]+VTGTFTGT8
- XMT7T8T(T7T8T(T(T)#/D,^0SI'.D<V2S9++D\J5QY><PYO#G<&?OJ*[I[4`:4
- XMU$X]9-1`@!+(````8$LA]BD=`0XQT>H,QLXBH$K,````2C4T]C:ZL,RVQ[K#
- XMOK_"N\:XR+;*M,RRSK#]"=)_U%XM8^+8$`'GXAV#XM9?U'TI_0L,ZRS+3*ML
- XMBXQKO"O[[#NL>VS+"Z"A),T```"->&CV4-BW`UPP+,D"71`?U0&ML!6ZM;H!
- XM&VP;;=M<>UVK+/LM>RT[+3L=FQT+#=L,ZPW[#+L`$[#(H!>L:@&:Q*`;K"D!
- XM^<"0(9OI`CF\D"6;J0)YN8`IBX@"N+:`+8M7`O>T@"^+*`,8L7`S>P@#.*<#
- XM5Y]P-WA@.6=P.79@.V7W`[=&`]8W`]<N-@/V%P/[+K`$&R`_?C%@/V)P/7-@
- XM/63W`[=6`[9G`Y=V`Y:/<#=Y<#5Z@#.+!P,WL8`QBR@"^+1P+WM8`MBV@"N+
- XMB`*8N9`GFZD"6;R0(YOI`AG`D!^<*@&ZQ*`9K&H!>LBP`3L,NPW[#.L-VPT+
- XM'9L=.RT[+7LL^RVK7'M=VVP;8!&ZM;H!7;`:U0']$"7)`LPP-;?8L#S.````
- XM/RUH]E#(7;?9Z9V>9]OE7=\\N+.X/!<WP1QC,PCS,\8<%S?!.+.XRSW>1=OD
- XM?9[0G9[#?;ZEW3R0L%_/````/RUH]E#(7;?9Z)V>1]OD7,'$/$%JDYH\-37#
- XM$)@<-37#.I.:RSW>1=OD?9Z)V7VU`Y7;?9YYV>5]OD7*BSN#P7-\$<8S,(\S
- XM/&'!<WP3BSN,KD7;Y7V>>=E]M<B@A-4````_.6CV4,^-2QT;//M<UT?+:%RF
- XMA\EGC(9ZQG:P_&9[#\5WL,5IG%>GQGL%Q_?6C6XGUN.-9];DC5^=7BC5Y)U.
- XM6=3EG4Y9U.2=7BC5^=7DC6?6XXUN)]:-;WQUL'QGI\69;%^P=\7[!VQK!GQJ
- XM=LB';)>&REALMT?-M<^ST;'4C/#!"=@```!*-U_W5P'$`EXF`C<"/V`3M7`0
- XMU";>W]P!';J;VITIV(U9UHUJU(ULTWU\TGV-#0?8<7Q]AB>WV6-Z?8<WGWV6
- XM5WC8=8;WV6=UC8=X3XV&B$C7>(/XV&J"C7>H*-=K@OC6>X&=9LU=5\U?U6T-
- XM74?0U?U&T=73?1U?TVTM72?2U?TFT]71?3U?T6U-70?4U?T&U=7'U=7&UM6W
- XMUI&+?6@HMM>"BGUX**;8@IEM>2F'UY*8;8DXAMB$AWV(2';9A7=MEVA7V(:%
- XM;9AW5MEX@WV(GW-ME[<7V'QQ;9?0T-A]'0UXTKUXU*UHUIU)V)TIV<FML!'<
- XMW]URU`$&:P$V`C<"/B8"5`'`D6;9````9UIJ^E&\I-ZLU[+2MLZBHJ+*H*J@
- XMQIL)PXM(P(N(O7O'NVP&N6PFMUQEM5R%LUREL5S%KUSEK5T%K$TDJUTEJ5U%
- XMJ$UDIUUEI5V%I$VDHUVEHDW$H5W%H$WDE=Y8]`$$=;J+162XI+)&2V6$L45;
- XM1:,Z]42T2G*O1$LTJ2KD1+)*LJU#6Q2M*L4DL5K2K4)+%*Q*U"2P6K:L0O2O
- XM6K>L05KFJWK)KUK5KHKUKCKX^N;*CZY<N.>M;+FL;*44K&RD)*U<I"XDK6R4
- XM):U<A32M7(1$K6QT1*Y;$JI$6M:P*I54KEKRJD9*]:XJI&6N6M*J5TKUK"JD
- XMA+!:HJM(6P6H*K64L5IBK$H%L6HCK%H4LW=*U*);2DKEHTMXL4I%V%I5UEIT
- XMUDJ%U%J5TEJTTDK%T%K5SEKUS%L5RELUR%M5QEMVPFN6P&NWO'O8N(P(M(PY
- XML)QJ"JH,JBHJ+.MM*RUZS>I+P#`1V@```#\R-/HS%L'6YG9M86P06`S@````
- XM7!YTV%4/[L%L6`WA````7!YTV%?L%F;`\L!%X@```%PA=-A5`03>;=?<C;C:
- XMG:G:G:G:G:G:^=J=J=JMJ=JMFMJ=JMGZV?K9O9K9^]CBO8XKV.*]C\V.*]CC
- XMS8^]C@-<V,!6XP```%PB=NY7V>`3S9O9XLV/S9O9S9O9O9S9O9O9O9O9O9O9
- XMK:K9K:K9K:G:G:G<]M^=Z=Z=VMVMRMVMRMR]N]N]N]N]N]K-J]N]K-J]K\VN
- XM+-J]K@$\R$/D````7"%TV%?@-<V?O9X\V>*]G\V>*]KBO:XKVOO:K:O:^MOZ
- XMVZVYVZVZVYVZVYW)W/G<G<G<G<G<G<G=C=C=?>8!!%@-\````%P?=.M5#^[!
- XM;69`#/$```!<'W3K5U[K(/O(1O(```!<(G3N54`1;??>C>G=G=G=G=G=G=G=
- XMG=G<K<G=G<K<K<G<K<^MSZW/K;O;K;O;K;^]OBO:S:XKVOS:^]KDS:O:X#7`
- XMR%3S````7"%VV%?@$\V;V>+-G\V;V<V;VOO:O:O:O:K;K;K;K<K;K<G<K<K<
- XMG=G]YMN=F=FMBMF=FMFMBMFMFMFMF]B]B]C[V+V,V+V/S7XLV+V.`3S8P$CT
- XM````7")T[E?9X#7-F]GDS9^]G\V>*]G-GBO9^]JMJ]JMJ]KZVOK:^MJMN=NM
- XMJMN=N=NMN=N=N=N=N=N=N=N=N=N-U]YM]`$0V`OU````7`QVV%<`6*#8"_8`
- XM``"-A03\(``A8&")^P```(UX1/8^E5VVVG#:;:<-IMIPV7#:;:<-EPV7#9]P
- XMV7#9<-EPV,&(Q(7%A,:"R(')?W+7<M9SU7/5=-1TTW;1=\]YSGK0>-)YU'C6
- XM=M=UUW77=-ATV'/9<MIRV7+:R(/'A,:&Q(?#B,"+<-MPVW#;<-OW#;<-MPVV
- XMVW#;<-MMMPVVVW#;;<6PV`O\````/S(T^C,`HJ!@B?T```"->$3V/K!=QMMP
- XMVVVW#;;;<-MPVVVW#;<-MPV_<-MPVW#;<(O!A\2&Q87&A,B#R-IRV7+9<]ES
- XMV'38=-=VUG?5>=-ZTGC1><]XT';2==-UU'34=-5SUG+6<M=R@<>"QX/&A,2&
- XMPXG`V7#9<-EPV7#9]PV7#9<-IMIPV7#:;:<-IMIPVFVUE5`<_@```&]:6O94
- X7ACK^@F"%LA#R&RA>?6"%LA#R&R'U]O;:
- X`
- Xend
- END_OF_FILE
- if test 17561 -ne `wc -c <'fonts.lj/S.28.pk.UU'`; then
- echo shar: \"'fonts.lj/S.28.pk.UU'\" unpacked with wrong size!
- fi
- # end of 'fonts.lj/S.28.pk.UU'
- fi
- if test -f 'man/troff2ps.1.S' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'man/troff2ps.1.S'\"
- else
- echo shar: Extracting \"'man/troff2ps.1.S'\" \(15909 characters\)
- sed "s/^X//" >'man/troff2ps.1.S' <<'END_OF_FILE'
- X.\"Copyright 1988 by Chris Lewis 2.11 91/03/26
- X.TH TROFF2PS %%MANEXT%% "Psroff %%T2VERSION%%"
- X.SH NAME
- Xtroff2ps, troff2lj, troff2xx \- convert troff output to Postscript, HP etc.
- X.SH SYNOPSIS
- X.BI %%LIBDIR%%/troff2 xx
- X.BI "[\-D" debopts "]"
- X.BI "[\-T" xx "]"
- X.BI "[\-R" nn "]"
- X.BI "[\-P" opt "]*"
- X.BI "[\-l" length "]"
- X.BI "[\-p" prolog "]"
- X.BI "[\-O" l "]"
- X.BI "[\-Y" l "]"
- X.BI "[\-W" directory "]"
- X.B "[\-N]"
- X.B "[\-Z]"
- X.B "[\-V]"
- X.B "[\-M]"
- X.B "[\-S]"
- X.SH DESCRIPTION
- X.I Troff2ps
- Xtakes
- XCAT
- X.I troff
- Xoutput on standard input and transforms it into another format for
- Xoutput on a printer.
- XThis program is normally invoked by
- X.IR psroff (%%MANEXT%%),
- Xwhich has a more complete description of how to use some of the more
- Xinteresting features of this program.
- X.PP
- XThe
- X.B \-N
- Xoption tells troff2ps to expect
- X.I ditroff
- X(\f3D\fPevice \f3I\fPndependent \f3Troff\fP)
- Xinput instead of CAT
- X.IR troff .
- X(NOTE: if you wish to use ditroff, you have to make sure that the
- Xditroff widths are installed in the proper directory (/usr/lib/font/devxxx)
- Xfor ditroff to find, and that
- X.B \-d
- Xoption is set correctly to the appropriate name (same as the dev suffix)
- Xso that the ditroff backend will work properly.
- X.PP
- XThe output format is determined by how
- X.I troff2ps
- Xis invoked.
- XNormally,
- X.I troff2ps
- Xwill generate PostScript output, but the
- X.B \-T
- Xoption will allow you to specify other types of output.
- XYour system administrator (or the original author of this program) may
- Xmake other output options available from time to time.
- X.PP
- XThe
- X.BI \-l length
- Xoption is used to tell the software how long the pages are on the printer.
- XThe default value is 11 inches.
- XLength should be written as if you were issuing a ``.pl''
- X.I troff
- Xcommand; eg: troff scaling should be used.
- XFor example: ``\-l11i'', ``\-l4752u'', ``\-l792p'' and ``\-l66P''
- Xspecify a page length of
- X11 inches in inches,
- X.I troff
- Xunits, points and Picas respectively.
- XCentimetres (``c'') are also supported, but ``v'', ``m'' and ``n'' are not.
- X.PP
- XThe
- X.BI \-T xx
- Xoption sets the output format.
- XFor example, "troff2ps \-Tlj" will generate Laserjet output.
- X.PP
- XThe
- X.B \-D
- Xoption generates scads of diagnostic output in a file called "diagnostics"
- Xin the current directory.
- XThe type of diagnostics is selected by
- X.IR debopts ,
- Xwhich is a string of characters from the following list: 'c': cat codes, 's':
- Xspecial directives, 'f': font management (laserjets), 'b':
- Xcat\(->backend character translations, 'p': PK font handling, 'v':
- Xextremely verbose, 'F' flush after every debug print statement (very slow).
- XIf DEBUG turned off during compilation, this will not be available.
- X.PP
- XThe
- X.B \-V
- Xoption causes
- X.I troff2ps
- Xto print a version message and quit.
- X.PP
- XA trailer page of statistics can be generated by using the
- X.B \-M
- Xoption provided that the driver supports it.
- X.PP
- XWhere
- X.I troff2ps
- Xis generating output for another typesetting filter (eg: jetroff),
- Xsometimes the filter will require different resolution settings for output.
- XFor example, jetroff parsing of ditroff input assumes a resolution of
- X300 in character positioning, but jetroff does not parse the "x res <nn>"
- Xcommand.
- XThe
- X.BI "[\-R" nn "]"
- Xoption allows you to specify the resolution that the output filter expects.
- XDitroff output has the default resolution set to 300.
- X(Which is compatible with jetroff.)
- X.PP
- XThe
- X.BI \-P opt
- Xdirective can be specified as many times as you wish, it tells
- X.I troff2ps
- Xto emit each
- X.I opt
- Xin turn as special requests after the printer-specific
- Xprolog is generated, but before any pages are emitted.
- XThis allows you to specify file inclusions or form overlays or any
- Xother special request feature in a way that won't interfere with
- Xthe beginning of documents, or things like changing forms without
- Xmodifying the document.
- XEach
- X.I opt
- Xis specified in the same way as the
- X.B sR
- Xmacro below.
- X.PP
- XThe
- X.B \-O
- Xand
- X.B \-Y
- Xoptions allow you to specify page X and Y offsets respectively.
- XThe value should be a number with a valid troff scale factor.
- XEg: ``\-O.463i''.
- X.PP
- XThe
- X.B \-Z
- Xand
- X.B \-W
- Xoptions control the optimizer.
- XIf the
- X.B \-Z
- Xoption is specified, the backends attempt to coalesce strings of
- Xcharacters into one drawing request.
- XWithout this option,
- X.B troff2
- Xdraws words by positioning each letter separately.
- XThe optimizer can reduce the size of the output file by factors of 3 or
- Xmore, and printer speeds similarly, particularly in Postscript.
- XThis option is disabled in ditroff-output-mode - it's up to the
- Xditroff filter to optimize.
- XThis option should only be used on printers that scale their fonts,
- Xrather than those that have individual fonts downloaded.
- XThis is because individual fonts often do not scale very well.
- XThe
- X.BI \-W directory
- Xallows you to specify where the width tables are, by default they
- Xare "/usr/lib/font/\fItype\fP", where \fItype\fP is the driver
- Xtype specified by the
- X.B \-T
- Xoption.
- XThis option is useful if you've moved the width directory somewhere
- Xelse, or the final directory name is different from the
- X.B \-T
- Xvalue (ie: with ditroff).
- XSee psrofflib entry "ops" for an example.
- XThe
- X.B \-W
- Xoption is ignored unless
- X.B \-Z
- Xis specified.
- X.PP
- XThe optimizer is quite good, but it is known that columns of text separated
- Xby a leader made up of periods can fool it.
- XAt the present time, it is unknown whether it's a width table or
- Xprinter or troff wierdness.
- X.PP
- XThe \-S option indicates that Postscript jobs should be terminated
- Xwith the directive "stop" instead of a control-D.
- X.SH "SPECIAL REQUESTS"
- X.BI troff2 xx
- Xsupports a number of additional features over and above bare
- XCAT
- X.IR troff .
- XThe macro adapters (see
- X.IR psroff (%%MANEXT%%))
- Xcontain a macro called "\fB.sR\fP".
- XThis macro is used to send special requests to the printer driver.
- XThe macro is invoked with the following arguments:
- X.RS
- X.nf
- X\&.sR "<func><arg><arg>..."
- X.fi
- X.RE
- X.PP
- XWhere
- X.I func
- Xis a single letter function code.
- X.I arg
- Xis an argument to the function - the number of arguments a function
- Xtakes is dependent on the function.
- X.TP 1.3i
- XFunction
- XMeaning
- X.TP 1.3i
- XO<name>
- XOverlay:
- Xuse "name" as the name of an overlay file.
- XMore than one can be specified by separating by blanks.
- XThe overlay is typically a name from the printer-specific library.
- XEg: "Confidential" is the name for the confidential overlay.
- XOnly supported by postscript driver and this directive must be
- Xexecuted before any output on the page the overlay is desired.
- XA O without a name (eg: ``.sR "O"'') cancels the current overlay.
- XMore than one overlay can be specified in one ``O'' request, as
- Xin "OLetterhead Confidential".
- X.TP 1.3i
- XL<name>
- XLetterhead: same as ``O'', except that the overlay is
- Xcancelled after the first use.
- XA ``.sR "LLetterhead"'' is the same as a ``.sR "OLetterhead"'' followed
- Xby ``.sR "O"'' after the pagebreak.
- XAny pre-existing "O" directive is cancelled by the "L" and vice-versa.
- X.TP 1.3i
- XFnAA
- XSwitch troff font (n) 1..4 to driver font AA (eg: .fp 1 CW becomes F1CW).
- XSee the
- X.I *.fonts
- Xfiles for which fonts are supported.
- X.TP 1.3i
- XI<file>
- XInclude the file specified as the single argument into the driver
- Xoutput.
- XThe driver type is appended onto the end of the file name.
- XEg: with the Postscript driver,
- X".sR Ifoo"
- Xbecomes an inclusion of "foo.ps".
- X.RI troff2 xx
- Xwill read the file from the current directory if it exists there, otherwise
- Xfrom the troff2 library directory.
- X.sp
- XThese are not
- X.I troff
- Xinclusions - they are interpreted only by
- X.RI troff2 xx.
- XThis is how the libraries are loaded.
- XSee the section on libraries on how to write library files.
- X.sp
- XFor compatibility with psfig, ``f<file>'' is accepted as a synonym.
- X.TP 1.3i
- Xi<file>
- XSame as "I", except that no translations are done whatsover,
- Xallowing you to enter binary files in the driver's output stream.
- X.TP 1.3i
- XE<string>
- XPasses "string" through the stderr of the backend.
- XUsed for passing index macro and macro error messages through to where
- Xyou can see them.
- XAll drivers.
- X.TP 1.3i
- XP<string>
- XPasses "string" through the backend directly to the printer.
- XThis is how you can send text in troff directly to the printer (ie:
- Xembedded postscript inclusions - eg: psfig).
- XAll drivers.
- XFor compatibility with psfig, ``p<string>'' is accepted as a synonym.
- X.TP 1.3i
- XS<string>
- XTakes the string and executes it as a command.
- XAll drivers.
- X.TP 1.3i
- XC<xx>
- XWhere ``xx'' is an extended character from the <type>.fonts file.
- XCauses psroff to print the character.
- XThe character needs to be defined in a ``extensions'' section in the
- Xappropriate ``fonts'' file for this to work.
- X.PP
- XNote: in the macro adapters, the real ``.tm'' directive has been renamed to
- X``.tM'', and is implemented by invoking ``.sR "E<tm arguments>"''.
- XThus, use of ".tm" will simply forward the message through stderr - and
- Xcan be used with the common document indexing schemes.
- X.SH "LIBRARY FILES"
- X.I Troff2ps
- Xsupports the inclusion of printer-specific files both through explicit
- Xinclusions in your
- X.I troff
- Xfiles, as well as including a standard prolog in a printer-independent
- Xfashion.
- X.B troff2ps
- Xalways loads the files
- X.IR xx. lib,
- Xand
- X.IR xx. fonts,
- Xwhere
- X.I xx
- Xis the printer type selected.
- XEg: "ps.lib" for PostScript, or "lj.lib" for LaserJet.
- X.PP
- Xxx.lib contains printer-initialization and xx.fonts contains a list
- Xof fonts and how to select them on the printer.
- XPrecise details of how the fields in xx.fonts is interpreted varies
- Xfrom device type to device type, and you should consult the
- Xexisting .fonts file for the driver you're interested in to see
- Xwhat can be specified.
- X.PP
- XThe default prefix is the driver type (eg:
- X.B \-T
- Xoption) but can be overridden by using the
- X.BI \-p prefix
- Xoption.
- XWith an include directive (either "I" or "i" with ".sR"),
- X.I troff2xx
- Xwill append the suffix to the file name before searching for the file.
- X.PP
- XFiles are searched for in the current directory first, then ./lib
- Xthen %%LIBDIR%%/lib last.
- X.PP
- XThe scanning of normal include files is done by stripping all comments
- X(prefixed by "%") and all whitespace (in lj driver, not neccessary for
- XPostScript).
- XSee the comment in the lj.lib file for more details.
- XWithin the lib files you can recursively include other files as well by
- Xusing "%%%include filename".
- X.PP
- XThe "i" include form (.sR macro) or "%%%binclude filename" form (inside
- Xa library file) does the same thing, except that the file included is
- Xsimply copied, no translations are done.
- X.SH "NEW BACKEND MECHANISM FOR SPECIAL DIRECTIVES"
- X.PP
- XThere is a new mechanism in
- X.B troff2ps
- Xto support backend communication other than by using ``.sR''.
- XThese commands are invoked by the following sequence:
- X.RS
- X.nf
- X\eka\eo'\e(bs\e(bs'<sequence>\e(bs\eh'|\enau'
- X.fi
- X.RE
- XWhich means, mark the current horizontal position in number register ``a'',
- Xoverstrike two bell symbols.
- X<sequence> is any special directive above (eg: Ifilename), where any spaces
- Xare replaced with some non-ASCII character
- X.RB ( catconv
- Xuses \e(ts).
- XThen, the sequence is followed by another bell symbol and the horizontal
- Xposition is reset to the position marked in ``a''.
- XSuch a directive takes up no horizontal space.
- XIf you want the directive to take up more horizontal space, you have to
- Xadd an increment onto the \eh'|\enau' clause.
- X.BR Catconv ,
- Xfor example, converts extended character sets into the above sequence,
- Xwhere <sequence> is replaced with ``Cxx'', where ``xx'' is the CAT
- Xtroff name, and the \eh clause is \eh'|\enau+1n'.
- XThis mechanism isn't perfect - troff2ps's finite state automaton
- Xdoes get screwed up with moderately complicated PIC directives.
- X.SH "CHARACTER ENCODING OVERRIDES"
- X.PP
- X.B Troff2ps
- Xconverts the CAT codes (see cat(1)) into printer codes in the backend drivers
- Xby means of a set of compiled-in tables.
- XThese compiled tables aren't always exactly what you want for your printer.
- X.B Troff2ps
- Xallows you to override these tables by the use of character overrides in the
- X.IR xx .fonts
- Xfile.
- XAt the end, you can specify what character to print for a given CAT
- Xcharacter.
- XThis is done by the specification of one or more of the ``symbol'', ``normal''
- Xor ``extensions'' sections.
- XEach section consists of one of these three words, followed by a sequence
- Xof character encoding overrides.
- X.PP
- XAn override is specified thusly:
- X.RS
- X.nf
- X.ta .5i 1i 2i 3i 4i 5i
- Xchar font sequence xshift yshift scale
- X.fi
- X.RE
- X.PP
- XWhere ``char'' is the CAT character name, eg: ``a'' for the character
- X``a'' or ``xx'' for the character ``\e(xx''.
- X``font'' is ``N'' if the character is to be found in a normal character set,
- Xor ``S'' is the character is to be found in the symbol character set, or a
- Xnumber specifying that the character should be found in a specific font (the
- Xnumber starts from 0, and corresponds to the font position in the ``xx.fonts''
- Xfile).
- XSequence is a string of codes you want to send to the printer for that
- Xcharacter.
- XSequence can be any combination of 8 bit characters or 3 digit octal escape
- Xsequences (eg: \e203).
- XMore than one character can be specified, along with backspaces (for
- Xoverstriking).
- XFor example, O\e008/ constructs a crude empty-set symbol.
- X(Backspace sequences or similar things may not work in a given driver.
- XFor example, backspace in Postscript won't do what you want).
- Xxshift and yshift are increments to be added to the X and Y position of the
- Xcharacter before emitting the sequence.
- XWhitespace (space or tab) cannot occur in the sequence, but you can use
- Xthe octal escapes.
- XThese numbers are scaled by the point size and are in the resolution of the
- Xbackend driver multiplied by 100.
- XSimilarly, the scale parameter is a factor to apply to the point size, and
- Xis similarly scaled by 100.
- X.PP
- XA special font directive ``D'' is also available, which means that the
- Xsequence should be emitted verbatim - this is of use only in Postscript,
- Xwhere you can use the sequence to be the name of an invokeable function that
- Xdraws the desired glyph - the X and Y position will be on the stack.
- X.PP
- Xfont defaults to the same as the header.
- Xsequence defaults to the character name.
- Xxshift, yshift and scale default to 0, 0 and 100 respectively, which means
- Xno x or y shift, and 1:1 scaling.
- X.PP
- XAs an example to clarify the overall format:
- X.RS
- X.nf
- Xnormal
- Xa N
- Xb S b
- Xsymbol
- Xbs N \e341
- Xextensions
- XAE 4 \e341 0 0 200
- X.fi
- X.RE
- XWhich means: character ``a'' is encoded as ``a'' and is found in the normal
- Xfont.
- XCharacter ``b'' is encoded as ``b'', and is found in the symbol font.
- XSymbol character \e(bs is to be found in the normal font, and is selected
- Xby emitting the octal character \e341.
- XAnd finally,
- X\e(AE is printed by selecting font 4 (usually the one defined after S
- Xin the xx.fonts file), and scaling by a factor of 2, and emitting \e341
- Xto select it.
- X.PP
- XNote: an error will be emitted if you get a troff character name in the
- Xwrong section.
- XGenerally speaking, ``normal'' characters are those that CAT troff has
- Xin fonts other than the symbol font.
- XSymbol characters are those found in the CAT troff symbol font.
- XAnd ``extensions'' are characters that aren't in CAT troff at all, but
- Xcan be faked through the ``Cxx'' special directives.
- X.SH FILES
- X.if t .ta 2.5i
- X.if n .ta 3.5i
- X%%LIBDIR%% Troff2ps library directory
- X.br
- X%%LIBDIR%%/lib/*.fonts Font tables.
- X.br
- X%%LIBDIR%%/lib/*.lib Prefix libraries for output.
- X.br
- Xetc.
- X.SH BUGS
- XDue to the nature by which special sequences are transmitted by
- Xtroff (troff's stderr is merged with its stdout and is piped into
- Xtroff2ps's stdin by
- X.IR psroff ),
- Xnormal troff errors will not be seen and may generate a few
- X"invalid opcode" messages from troff2ps or garble on output.
- XNormally the document will be truncated if this occurs.
- XIf this happens, run
- X.I psroff
- Xwith the ``\-F'' option which will show you troff's stderr without
- Xgenerating any output.
- X.PP
- XUnfortunately, there is no way at present for the ".sR" macro to
- Xchange fonts within a line - for some pretty bizarre reasons if you ask
- Xme.
- XNever mind.
- XAsk me if you want more information.
- X.SH "SEE ALSO"
- Xtroff(1), psroff(%%MANEXT%%), catconv(%%MANEXT%%).
- X.SH AUTHOR
- XChris Lewis
- END_OF_FILE
- if test 15909 -ne `wc -c <'man/troff2ps.1.S'`; then
- echo shar: \"'man/troff2ps.1.S'\" unpacked with wrong size!
- fi
- # end of 'man/troff2ps.1.S'
- fi
- if test -f 'troff2.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'troff2.c'\"
- else
- echo shar: Extracting \"'troff2.c'\" \(17179 characters\)
- sed "s/^X//" >'troff2.c' <<'END_OF_FILE'
- X/*
- X Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 Chris Lewis
- X All Rights Reserved
- X
- X See the LICENSE file for a full description of restrictions under which
- X this software is provided.
- X
- X Function: CAT Troff interpreter front end and mainline
- X */
- X
- X#include "defs.h"
- X
- X#ifndef lint
- Xstatic char SCCSid[] =
- X "@(#)troff2.c: 2.15 Copyright 91/03/25 23:20:47 Chris Lewis";
- X#endif
- X
- X#define ESC 0x80
- X#define FLASH 0x00
- X#define CONTROL 0x40
- X#define LEAD 0x60
- X#define SIZE 0x50
- X
- X#define DOWN 0
- X#define UP 1
- X#define LOWER 2
- X#define UPPER 3
- X#define FORWARD 4
- X#define BACKWARD 5
- X
- X#ifdef BSDHACK
- Xint magnify_lead = 0;
- X#endif
- X
- Xchar ptab[15] = { 7, 8, 10, 11, 12, 14, 18, 9, 6, 16, 20, 22, 24, 28, 36};
- Xint points, font;
- X
- Xint xpos, ypos;
- X
- X#ifdef VDEBUG
- Xchar *words[] = {
- X "down", "up", "lower", "upper", "forward", "backwards"
- X };
- X#endif
- X
- X
- X#define CTOINT(val,sig) ((~c)&sig)
- X
- Xint pagelength;
- Xint pageoffset;
- Xint pageyoffset;
- X
- Xchar *version, *shortversion;
- X
- Xint dumpflag = 0;
- X
- X#define CFONT (((mag == UPPER)<<2)|((rail == UPPER)<<1)|(tilt==DOWN))
- X#ifdef FONT4
- X#define calcfont font = (CFONT >> 1)
- X#else
- X#define calcfont font = CFONT
- X#endif
- X
- Xchar *progname;
- Xchar *printer;
- Xchar *device = {"alw"};
- Xchar **prologs = (char **) NULL;
- Xchar *pstrailer = "\004";
- X#define PROCHUNK 20
- Xint procount;
- X
- X#ifdef L_cuserid
- X#define nmMAX L_cuserid
- X#else
- X#define nmMAX 16
- X#endif
- X
- Xchar username[nmMAX];
- X
- Xdouble calc();
- X
- Xchar *driver = "ps";
- X#ifdef OPT
- Xchar *widthtables = (char *)NULL;
- Xchar *widthptr;
- Xint optimize = 0;
- X#endif
- X
- Xextern char *realloc();
- X
- X#define OPTLIST "d:O:Y:T:VD:l:MR:P::zp:W:ZNS"
- X
- X/* On 386/ix 1.0.6 profiling has a bug in it that leaves
- X two extra longs on the stack between the stack frame and
- X arguments on entry to main */
- X#ifdef PROFBUG
- X
- Xmain(j1, j2, argc, argv)
- Xlong j1, j2;
- Xint argc;
- Xchar **argv; {
- X
- X#else
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar **argv; {
- X
- X#endif
- X register int nc, c;
- X register int units;
- X register int rail, mag, tilt, half, escape, lead;
- X
- X extern int getopt();
- X extern char *optarg;
- X
- X#ifdef L_cuserid
- X extern char *cuserid();
- X
- X (void) cuserid(username);
- X if (!username[0])
- X#else
- X
- X extern char *getlogin();
- X
- X progname = getlogin();
- X if (progname)
- X strcpy(username, progname);
- X else
- X /* I could read /etc/passwd, but hell, why? */
- X#endif
- X sprintf(username, "uid=%d", getuid());
- X
- X /* some compilers complain about floating point in initializers... */
- X pagelength = DEFPL * TROFFRESOLUTION;
- X pageoffset = DEFOFF * TROFFRESOLUTION;
- X pageyoffset = DEFYOFF * TROFFRESOLUTION;
- X
- X progname = strrchr(argv[0], '/');
- X if (progname)
- X progname++;
- X else
- X progname = argv[0];
- X
- X version = T2VERSION + 4;
- X shortversion = strchr(version, '-') + 2;
- X
- X while((c = getopt(argc, argv, OPTLIST)) != EOF)
- X switch (c) {
- X case 'S':
- X pstrailer = "stop\n";
- X break;
- X#ifdef OPT
- X case 'Z':
- X optimize = 1;
- X break;
- X case 'W':
- X widthtables = mustmalloc(strlen(optarg) + 10, "widthname");
- X strcpy(widthtables, optarg);
- X strcat(widthtables, "/");
- X break;
- X#else
- X case 'Z':
- X case 'W':
- X fprintf(stderr,
- X "%s: optimization disabled; -Z/-W ignored (%s)\n",
- X progname, "see OPT in defs.h");
- X break;
- X#endif
- X case 'P':
- X if (!prologs) {
- X prologs = (char **) mustmalloc(PROCHUNK * sizeof(char*),
- X "prologs");
- X procount = 0;
- X }
- X prologs[procount++] = optarg;
- X /* insert the null */
- X if ((procount % PROCHUNK) == 0) {
- X prologs = (char **) realloc((char *) prologs,
- X (procount + PROCHUNK) * sizeof(char *));
- X }
- X prologs[procount] = (char *) NULL;
- X break;
- X case 'p':
- X printer = optarg;
- X break;
- X case 'd':
- X device = optarg;
- X break;
- X case 'z':
- X dumpflag++;
- X break;
- X case 'T':
- X driver = optarg;
- X break;
- X case 'R':
- X#if defined(DT)
- X {
- X extern int dtresolution;
- X dtresolution = atoi(optarg);
- X if (dtresolution == 0) {
- X fprintf(stderr, "%s: Invalid resolution: %s\n",
- X progname, optarg);
- X exit(1);
- X }
- X }
- X break;
- X#else
- X fprintf(stderr, "%s: Resolution not supported\n",
- X progname);
- X exit(1);
- X#endif
- X case 'N':
- X#ifdef DIT
- X ditroff = 1;
- X break;
- X#else
- X fprintf(stderr, "%s: ditroff frontend not configured\n");
- X exit(1);
- X#endif
- X case 'M':
- X metrics = 1;
- X break;
- X case 'V':
- X printf("%s: %s\n", progname, version);
- X exit(0);
- X case 'D':
- X#ifdef DEBUG
- X setdebug(optarg, "diagnostics");
- X break;
- X#else
- X fprintf(stderr, "%s: DEBUG disabled - recompile\n",
- X progname);
- X exit(1);
- X#endif
- X case 'O':
- X pageoffset = calc(optarg);
- X break;
- X case 'Y':
- X pageyoffset = calc(optarg);
- X break;
- X case 'l':
- X pagelength = calc(optarg);
- X if (pagelength == 0) {
- X fprintf(stderr, "%s: Bad pagelength %s\n", progname,
- X optarg);
- X exit(1);
- X }
- X break;
- X case '?':
- X default:
- X usage();
- X exit(1);
- X }
- X
- X getdriver(driver);
- X
- X if (!printer)
- X printer = driver;
- X
- X#ifdef OPT
- X if (!widthtables) {
- X widthtables = mustmalloc(strlen(driver) + strlen(FONTDIR) + 20,
- X "widthname");
- X sprintf(widthtables, "%s/%s/", FONTDIR, driver);
- X }
- X widthptr = widthtables + strlen(widthtables);
- X#endif
- X
- X loadfont(be->bestdfont, be->besymfont);
- X#ifdef DEBUG
- X if (debug & D_SPEC) {
- X for (c = 0; c < procount; c++) {
- X DBP((D_SPEC, "Prolog %d: %s\n", c, prologs[c]));
- X }
- X }
- X#endif
- X
- X if (dumpflag) {
- X
- X printf("Font table:\n\n");
- X for (c = 0; fonttable[c].tab[0]; c++)
- X printf("%-3s %-20s %-20s %-20s\n",
- X fonttable[c].tab[0],
- X fonttable[c].tab[1],
- X fonttable[c].tab[2],
- X fonttable[c].tab[3]);
- X
- X dumptables(be);
- X exit(0);
- X }
- X
- X#ifdef DIT
- X if (ditroff) {
- X dit();
- X#ifdef OPT
- X canonflush();
- X#endif
- X if (be->bepage)
- X (*be->bepage)();
- X if (be->beepilog)
- X (*be->beepilog) ();
- X exit(0);
- X }
- X#endif
- X
- X if (be->beprolog)
- X (*be->beprolog)();
- X
- X resetState();
- X
- X /* An Initialize sequence *usually* comes in first, but what the
- X hey ... */
- X xpos = 0;
- X ypos = -153;
- X escape = FORWARD;
- X lead = FORWARD;
- X half = LOWER;
- X rail = LOWER;
- X mag = LOWER;
- X tilt = DOWN;
- X calcfont;
- X
- X while ((c = getc(stdin)) != EOF) {
- X switch(c) {
- X case 0x00:
- X DBP((D_CAT,"NOP\n"));
- X break;
- X /* Flash (print character) codes */
- X case 0x01: case 0x02: case 0x03: case 0x04:
- X case 0x05: case 0x06: case 0x07: case 0x08:
- X case 0x09: case 0x0a: case 0x0b: case 0x0c:
- X case 0x0d: case 0x0e: case 0x0f: case 0x10:
- X case 0x11: case 0x12: case 0x13: case 0x14:
- X case 0x15: case 0x16: case 0x17: case 0x18:
- X case 0x19: case 0x1a: case 0x1b: case 0x1c:
- X case 0x1d: case 0x1e: case 0x1f: case 0x20:
- X case 0x21: case 0x22: case 0x23: case 0x24:
- X case 0x25: case 0x26: case 0x27: case 0x28:
- X case 0x29: case 0x2a: case 0x2b: case 0x2c:
- X case 0x2d: case 0x2e: case 0x2f: case 0x30:
- X case 0x31: case 0x32: case 0x33: case 0x34:
- X case 0x35: case 0x36: case 0x37: case 0x38:
- X case 0x39: case 0x3a: case 0x3b: case 0x3c:
- X case 0x3d: case 0x3e: case 0x3f:
- X /* This is terribly kludgey:
- X In 432 units per inch, 4752 is 11 inches.
- X When we go beyond this, we subtract 4752
- X continually until we're back in range.
- X */
- X while (ypos >= pagelength) {
- X ypos -= pagelength;
- X DBP((D_CAT,"Page break\n"));
- X if (be->bepage)
- X (*be->bepage) ();
- X }
- X /*c = c&0x3f; Isn't necessary */
- X /* Find the C/A/T code */
- X if (half == UPPER) {
- X if (c > 46) {
- X fprintf(stderr, "%s: Illegal upper flash: %d\n",
- X progname, c);
- X exit(1);
- X }
- X nc = c + 62;
- X } else
- X nc = c - 1;
- X
- X DBP((D_CAT,"nc=%d;pnts=%d;x,y=%d,%d;fnt=%d;\n",
- X nc,points,xpos,ypos,font));
- X#ifdef VDEBUG
- X DBP((D_CAT," rail=%s;mag=%s;tilt=%s;half=%s\n",
- X words[rail], words[mag],words[tilt], words[half]));
- X#endif
- X
- X#ifdef OPT
- X canoninsert(xpos, ypos, font, points, nc);
- X#else
- X if (be->beputchar)
- X (*be->beputchar)(xpos, ypos, font, points, nc,
- X (char *) NULL);
- X#endif
- X
- X break;
- X /* Control codes */
- X case 0x40:
- X DBP((D_CAT,"Initialize\n"));
- X xpos = 0;
- X ypos = -153;
- X escape = FORWARD;
- X lead = FORWARD;
- X half = LOWER;
- X rail = LOWER;
- X mag = LOWER;
- X tilt = DOWN;
- X calcfont;
- X break;
- X case 0x41:
- X DBP((D_CAT,"Rail lower\n"));
- X rail = LOWER;
- X calcfont;
- X break;
- X case 0x42:
- X DBP((D_CAT,"Rail upper\n"));
- X rail = UPPER;
- X calcfont;
- X break;
- X case 0x43:
- X DBP((D_CAT,"Mag upper\n"));
- X mag = UPPER;
- X calcfont;
- X break;
- X case 0x44:
- X DBP((D_CAT,"Mag lower\n"));
- X mag = LOWER;
- X calcfont;
- X break;
- X case 0x45:
- X DBP((D_CAT,"half lower\n"));
- X half = LOWER;
- X break;
- X case 0x46:
- X DBP((D_CAT,"half upper\n"));
- X half = UPPER;
- X break;
- X case 0x47:
- X DBP((D_CAT,"Escape forward\n"));
- X escape = FORWARD;
- X break;
- X case 0x48:
- X DBP((D_CAT,"Escape backward\n"));
- X escape = BACKWARD;
- X break;
- X case 0x49:
- X DBP((D_CAT,"STOP\n"));
- X break;
- X case 0x4a:
- X DBP((D_CAT,"Lead forward\n"));
- X lead = FORWARD;
- X break;
- X case 0x4b:
- X DBP((D_CAT,"Software cut!\n"));
- X break;
- X case 0x4c:
- X DBP((D_CAT,"Lead backward\n"));
- X lead = BACKWARD;
- X break;
- X case 0x4d:
- X#ifdef SPECIAL
- X#define SPSIZ 256
- X {
- X static char specialbuf[SPSIZ], *sbp;
- X sbp = specialbuf;
- X#ifdef OPT
- X canonflush();
- X#endif
- X while((c = getc(stdin)) != EOF && c != '\n') {
- X if (!c) /* some troff's add NOP's when
- X the internal output buffer is
- X flushed */
- X continue;
- X if (sbp < &specialbuf[SPSIZ]-2)
- X *sbp++ = c;
- X }
- X *sbp = '\0';
- X
- X DBP((D_SPEC,"SPECIAL SEQUENCE: %s!\n", specialbuf));
- X dospecial(specialbuf);
- X break;
- X }
- X#else
- X fprintf(stderr, "%s: Illegal C/A/T code - %s\n",
- X progname, "special sequences are disabled");
- X exit(1);
- X#endif
- X#ifdef BSDHACK
- X case 0x4e:
- X magnify_lead = 1;
- X break;
- X#endif
- X#ifdef FONT8
- X case 0x4e:
- X DBP((D_CAT,"Tilt up\n"));
- X tilt = UP;
- X calcfont;
- X break;
- X case 0x4f:
- X DBP((D_CAT,"Tilt down\n"));
- X tilt = DOWN;
- X calcfont;
- X break;
- X#endif
- X
- X /* Size changes */
- X case 0x50: case 0x51: case 0x52: case 0x53:
- X case 0x54: case 0x55: case 0x56: case 0x57:
- X case 0x58: case 0x59: case 0x5a: case 0x5b:
- X case 0x5c: case 0x5d: case 0x5e: case 0x5f:
- X /* basic code is the points = ptab[c] line.
- X The rest of the brain-damage is due to the
- X fact that switching from some of the fonts
- X to some of the others blow the horizontal
- X position - see the cat(5) manual page
- X about single vs. doubler point sizes. */
- X { static lastc = 0;
- X c &= 0xf;
- X points = ptab[c];
- X
- X DBP((D_CAT,"SPoints:%d;lastc:%5d;c:%d;xpos:%d\n",
- X points, lastc, c, xpos));
- X if (lastc <= 8 && c > 8) /* single -> doubler */
- X xpos -= 55;
- X else if (lastc > 8 && c <= 8) /* doubler -> single */
- X xpos += 55;
- X
- X DBP((D_CAT,"EPoints:%d;lastc:%5d;c:%d;xpos:%d\n",
- X points, lastc, c, xpos));
- X lastc = c;
- X break;
- X }
- X /* Lead (vertical motion) codes */
- X case 0x60: case 0x61: case 0x62: case 0x63:
- X case 0x64: case 0x65: case 0x66: case 0x67:
- X case 0x68: case 0x69: case 0x6a: case 0x6b:
- X case 0x6c: case 0x6d: case 0x6e: case 0x6f:
- X case 0x70: case 0x71: case 0x72: case 0x73:
- X case 0x74: case 0x75: case 0x76: case 0x77:
- X case 0x78: case 0x79: case 0x7a: case 0x7b:
- X case 0x7c: case 0x7d: case 0x7e: case 0x7f:
- X
- X#ifdef OPT
- X canonflush();
- X#endif
- X
- X DBP((D_CAT,"Lead(vertical) %02x\n", c&0x1f));
- X units = CTOINT(c,0x1f);
- X#ifdef BSDHACK
- X if (magnify_lead) {
- X units *= 64;
- X magnify_lead = 0;
- X }
- X#endif
- X if (lead == FORWARD)
- X ypos += 3*units;
- X else
- X ypos -= 3*units;
- X break;
- X /* Escape (horizontal motion) codes */
- X case 0x80: case 0x81: case 0x82: case 0x83:
- X#ifndef lint
- X case 0x84: case 0x85: case 0x86: case 0x87:
- X case 0x88: case 0x89: case 0x8a: case 0x8b:
- X case 0x8c: case 0x8d: case 0x8e: case 0x8f:
- X case 0x90: case 0x91: case 0x92: case 0x93:
- X case 0x94: case 0x95: case 0x96: case 0x97:
- X case 0x98: case 0x99: case 0x9a: case 0x9b:
- X case 0x9c: case 0x9d: case 0x9e: case 0x9f:
- X case 0xa0: case 0xa1: case 0xa2: case 0xa3:
- X case 0xa4: case 0xa5: case 0xa6: case 0xa7:
- X case 0xa8: case 0xa9: case 0xaa: case 0xab:
- X case 0xac: case 0xad: case 0xae: case 0xaf:
- X case 0xb0: case 0xb1: case 0xb2: case 0xb3:
- X case 0xb4: case 0xb5: case 0xb6: case 0xb7:
- X case 0xb8: case 0xb9: case 0xba: case 0xbb:
- X case 0xbc: case 0xbd: case 0xbe: case 0xbf:
- X case 0xc0: case 0xc1: case 0xc2: case 0xc3:
- X case 0xc4: case 0xc5: case 0xc6: case 0xc7:
- X case 0xc8: case 0xc9: case 0xca: case 0xcb:
- X case 0xcc: case 0xcd: case 0xce: case 0xcf:
- X case 0xd0: case 0xd1: case 0xd2: case 0xd3:
- X case 0xd4: case 0xd5: case 0xd6: case 0xd7:
- X case 0xd8: case 0xd9: case 0xda: case 0xdb:
- X case 0xdc: case 0xdd: case 0xde: case 0xdf:
- X case 0xe0: case 0xe1: case 0xe2: case 0xe3:
- X case 0xe4: case 0xe5: case 0xe6: case 0xe7:
- X case 0xe8: case 0xe9: case 0xea: case 0xeb:
- X case 0xec: case 0xed: case 0xee: case 0xef:
- X case 0xf0: case 0xf1: case 0xf2: case 0xf3:
- X case 0xf4: case 0xf5: case 0xf6: case 0xf7:
- X case 0xf8: case 0xf9: case 0xfa: case 0xfb:
- X case 0xfc: case 0xfd: case 0xfe:
- X#endif
- X
- X units = CTOINT(c,0x7f);
- X if (escape == FORWARD)
- X xpos += units;
- X else
- X xpos -= units;
- X DBP((D_CAT,"ESC (hor): %02x\n", c&0x7f));
- X break;
- X
- X case 0xff:
- X DBP((D_CAT,"Illegal: %02x\n", c));
- X break;
- X }
- X }
- X#ifdef OPT
- X canonflush();
- X#endif
- X if (be->bepage)
- X (*be->bepage)();
- X if (be->beepilog)
- X (*be->beepilog) ();
- X exit(0);
- X /* NOTREACHED */
- X}
- X
- Xusage() {
- X fprintf(stderr, "usage: %s [-Ttype][-V]\n", progname);
- X fprintf(stderr, " ... see troff2ps manpage for full description of %s\n",
- X OPTLIST);
- X}
- X
- Xdouble
- Xcalc(s)
- Xregister char *s; {
- X double retval = 0.0;
- X char scale;
- X switch (sscanf(s, "%lf%c", &retval, &scale)) {
- X case 0:
- X case EOF:
- X retval = 0.0;
- X case 1:
- X retval *= TROFFRESOLUTION; /* default is inches */
- X break;
- X case 2:
- X switch(scale) {
- X default:
- X fprintf(stderr, "%s: bad scale %c\n", progname, scale);
- X retval = 0.0;
- X case 'i':
- X retval *= TROFFRESOLUTION;
- X case 'u':
- X break;
- X case 'c':
- X retval *= TROFFRESOLUTION * 50. / 127.;
- X break;
- X case 'p':
- X retval *= 6.; /* points */
- X break;
- X case 'P':
- X retval *= 72.; /* Picas */
- X break;
- X }
- X break;
- X }
- X return(retval);
- X}
- X
- X#ifdef SPECIAL
- X
- Xdospecial(string)
- Xchar *string; {
- X char buffer[512];
- X register struct cattab *p;
- X extern struct cattab *ditsearch();
- X
- X buffer[0] = '\0';
- X
- X DBP((D_SPEC,"Dospecial: (%d) %s\n", strlen(string), string));
- X while (*string)
- X switch(*string) {
- X case 'D': {
- X short values[100];
- X int opcode, ct, newx, newy, i;
- X
- X if (!(opcode = drawparse(&ct, values, &string[1])))
- X break;
- X newx = specXPos;
- X newy = specYPos;
- X if (opcode == 'e' || opcode == 'E')
- X newx += values[0];
- X else if (opcode != 't' && opcode != 'f') {
- X for (i = 0; i < ct/2; i++) {
- X newx += values[i*2];
- X newy += values[i*2+1];
- X }
- X if (i*2 < ct)
- X newx += values[i*2];
- X }
- X
- XDBP((D_CAT, "Draw: xpos,ypos,opcode,ct,special = %d,%d,%d,%d,%s\n",
- X xpos, ypos, opcode, ct, string));
- X
- X if (be->bedraw)
- X (be->bedraw)(specXPos, specYPos, opcode, ct, values,
- X string);
- X specXPos = newx;
- X specYPos = newy;
- X *string = '\0';
- X return;
- X }
- X case 'C':
- X
- X if (extcount && !spctab)
- X fixtab();
- X
- X string++;
- X if (strlen(string) == 1)
- X p = dittab[(*string)&0xff];
- X else
- X p = ditsearch(string);
- X
- X if (!p) {
- X fprintf(stderr,
- X "%s: don't know this character: %s\n", progname,
- X string);
- X if (be->beputchar)
- X (*be->beputchar)(specXPos, specYPos, font, points, 0,
- X string);
- X } else {
- X if (be->beputchar) {
- X if (p->ch_wididx == NTC) /* extended character */
- X (be->beputchar)(specXPos, specYPos,
- X p->ch_set == N ? -font-1: -symidx-1,
- X points, p->ch_catidx,
- X extchars[p->ch_catidx].t2b_charseq);
- X else
- X (be->beputchar)(specXPos, specYPos,
- X p->ch_set == N ? font: symidx,
- X points, p->ch_catidx, (char *) NULL);
- X }
- X }
- X
- X *string = '\0';
- X return;
- X
- X case 'E':
- X fprintf(stderr, "%s\n", string+1);
- X *string = '\0';
- X return;
- X
- X case 'p':
- X case 'P':
- X if (be->bedraw)
- X (*be->bedraw)(specXPos, specYPos, NULL);
- X if (be->bepassthru)
- X (*be->bepassthru)(string+1);
- X else
- X printf("%s\n", string+1);
- X /* reset driver state! */
- X resetState();
- X *string = '\0';
- X return;
- X
- X case 'S':
- X system(string+1);
- X /* reset driver state! */
- X resetState();
- X *string = '\0';
- X return;
- X
- X case 'F':
- X if (be->befontsel)
- X (*be->befontsel)(*(string+1), string+2);
- X *string ='\0';
- X return;
- X#ifdef FORM
- X case 'L':
- X strcpy(buffer+2, string+1);
- X buffer[1] = '+';
- X *string = '\0';
- X string = buffer;
- X case 'O':
- X if (be->beoverlay)
- X (*be->beoverlay)(string+1);
- X *string = '\0';
- X return;
- X#endif
- X case 'i':
- X strcpy(buffer, "b");
- X
- X case 'f':
- X case 'I':
- X strcat(buffer, "include ");
- X strcat(buffer, string+1);
- X interp(buffer, (be->bexlat && *string == 'F') ? be->bexlat:
- X FNULL, driver);
- X return;
- X
- X default:
- X fprintf(stderr, "%s: Illegal special sequence %s\n", progname, string);
- X return;
- X }
- X}
- X
- X#endif
- END_OF_FILE
- if test 17179 -ne `wc -c <'troff2.c'`; then
- echo shar: \"'troff2.c'\" unpacked with wrong size!
- fi
- # end of 'troff2.c'
- fi
- if test -f 'widths/genext.S' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'widths/genext.S'\"
- else
- echo shar: Extracting \"'widths/genext.S'\" \(1534 characters\)
- sed "s/^X//" >'widths/genext.S' <<'END_OF_FILE'
- X%%STARTSHELL%%
- X# Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 Chris Lewis
- X# All Rights Reserved
- X#
- X# See the LICENSE file for a full description of the restrictions
- X# under which this software is provided.
- X#
- X# 2.6 91/03/10 Generate extension list of characters for troff2ps.
- Xif [ $# != 1 ]
- Xthen
- X echo "usage: genext <ditroff font width directory>" >&2
- X exit 1
- Xfi
- Xwidthdir=$1
- Xif [ ! -d $widthdir ]
- Xthen
- X echo "genext: $widthdir not a directory"
- X exit 1
- Xfi
- Xa=`ls $widthdir/? 2> /dev/null`
- Xif [ -n "$a" ]
- Xthen
- X files=$a
- Xfi
- Xa=`ls $widthdir/?? 2> /dev/null`
- Xif [ -n "$a" ]
- Xthen
- X files="$files $a"
- Xfi
- Xif [ -z "$files" ]
- Xthen
- X echo "genext: No width tables in $widthdir"
- X exit 0
- Xfi
- X
- Xawk '
- X BEGIN {
- X state = 0
- X seen["BLOT"] = 1
- X }
- X
- X$1 ~ /^{"/ {
- X i = length($1) - 3 - 1
- X ch = substr($1, 3, i)
- X if (ch ~ /^\\/)
- X ch = substr(ch, 2)
- X catcodes[ch] = 1
- X next
- X }
- X$1 ~ /^name/ {
- X curfont = $2
- X next
- X }
- X/faked/ { next }
- XNF >= 4 && $2 ~ /^[0-9]*$/ && $3 ~ /^[0-9]*$/ {
- X if (catcodes[$1] || $1 == "\\|" || $1 == "\\^")
- X next
- X if (seen[$1]) {
- X if (seen[$1] != $4)
- X printf "Duplicate %s, but different codes! (%s/%s)\n", \
- X $1, seen[$1], $4 > "/tmp/errors"
- X next
- X }
- X seen[$1] = $4
- X if (curfont == "S")
- X flag = "S"
- X else if (curfont == "S2")
- X flag = 4
- X else
- X flag = "N"
- X code = $4
- X if (length(code) > 3)
- X code = substr(code, length(code) - 2, 3)
- X while(length(code) < 3) {
- X code = "0" code
- X }
- X printf("%s %s \\%s\n", $1, flag, code)
- X }
- X
- X' ../utils/ljtab.c $files
- END_OF_FILE
- if test 1534 -ne `wc -c <'widths/genext.S'`; then
- echo shar: \"'widths/genext.S'\" unpacked with wrong size!
- fi
- # end of 'widths/genext.S'
- fi
- echo shar: End of archive 5 \(of 19\).
- cp /dev/null ark5isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 19 archives.
- echo "Read the README to get started with psroff installation"
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
-
- exit 0 # Just in case...
-